package dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;



import vo.Produto;

public class ProdutoDao {

	private static final String PERSISTENCE_UNIT= "webSuperMarket";
	
	public List<Produto> getProdutos(){
		EntityManagerFactory entityManagerFactory=Persistence.
				createEntityManagerFactory(PERSISTENCE_UNIT);
		EntityManager em= entityManagerFactory.createEntityManager();
		Query findAllQuery = em.createNamedQuery("produtos.findAll");
		List<Produto> produtos = findAllQuery.getResultList();
		return produtos;
	}
	
	public Produto getProdutoById(String codProduto){
		EntityManagerFactory entityManagerFactory = Persistence.
				createEntityManagerFactory(PERSISTENCE_UNIT);
		EntityManager em = entityManagerFactory.createEntityManager();
		Query findAllQuery = em.createNamedQuery("produtos.byId");
		findAllQuery.setParameter("codProduto", codProduto);
	    Produto produto = (Produto)findAllQuery.getSingleResult();
		return produto;
		
	}
	
	public void addUpdateProduto(Produto produto) throws Exception{

		EntityManagerFactory emf = Persistence	.createEntityManagerFactory(PERSISTENCE_UNIT);
		EntityManager em = emf.createEntityManager();
		if (produto.getCodProduto() == null) {
			produto.setCodProduto(null);
		}
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		try {
			em.merge(produto);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			throw new Exception(e.getMessage());
		} finally {
			em.close();
		}
		
	}
	
	public void deleteProduto(String codProduto){
		EntityManagerFactory emf = 	Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
		EntityManager em = emf.createEntityManager();
		Query findAllQuery = em.createNamedQuery("produtos.byId");
		findAllQuery.setParameter("codProduto", codProduto);
	    Produto produto = (Produto)findAllQuery.getSingleResult();
		if (produto != null) {
			EntityTransaction tx = em.getTransaction();
			tx.begin();
			try {
				em.remove(produto);
				tx.commit();
			} catch (Exception e) {
				tx.rollback();
			} finally {
				em.close();
			}
		}
	}
}
